package leetcode

import "gitee.com/zzf35/leet-code/structures"

/**
 * Definition for singly-linked list.
 */

// 2,4,3  +  5,6,4  ==7,0,8
// 342+465=807
func addTwoNumbers(l1 *structures.ListNode, l2 *structures.ListNode) *structures.ListNode {
	head := &structures.ListNode{Val: 0}
	n1, n2, carry, current := 0, 0, 0, head

	// 循环取l1和l2，依次取出来的是   个位   十位    百位
	for l1 != nil || l2 != nil || carry != 0 {
		if l1 == nil {
			n1 = 0
		} else {
			n1 = l1.Val
			l1 = l1.Next
		}
		if l2 == nil {
			n2 = 0
		} else {
			n2 = l2.Val
			l2 = l2.Next
		}
		// 取余数
		// 这儿创建单链时，依次创建的是  个位   十位  百位
		// 因为是先计算的个位   所以要一直新建ListNode
		current.Next = &structures.ListNode{Val: (n1 + n2 + carry) % 10}
		current = current.Next
		// 取除数，进到下一个高位
		carry = (n1 + n2 + carry) / 10

	}

	return head.Next
}
